Template Dactyl Manuform

Compilación

Para compilar el firmware de este teclado usamos lo siguiente:

Podemos usar dos comandos distintos para compilar y flashear el firmware (básicamente los dos hacen los mismo);

Notas Compilación

Al movernos a un commit antiguo podemos obtener un mensaje de submodulos de git no actualizados:

La etiqueta (nuevos commits) al lado de los cambios indica que es un submodulo de git, en este caso podemos borrar dichas carpetas y despues hacer un "git restore ."

Una vez hecho esto tendremos que lanzar el siguiente comando, para regenerar los submodulos:

make git-submodule

Una vez hecho esto al hacer "git status" deberíamos de tener el commit limpio sin ningún cambio.

A partir de aqui podemos guardar las configuraciones siguientes y hacer el flasheo del teclado.

dactyl_manuform/5x6/config.h

En el archivo config.h que está dentro de la carpeta 5x6 ponemos la siguiente configuración para activar la iluminación LED en el teclado:

#define RGB_DI_PIN D3
#define RGBLED_NUM 7
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_LAYERS

#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF

Y en el archivo rules.mk tenemos que tener la siguiente linea:

RGBLIGHT_ENABLE = yes
dactyl_manuform/5x6/keymaps/Alfa-Omega/config.h

Para configurar las velocidades del raton editamos el archivo config.h dentro de la carpeta del teclado incluyendo lo siguiente al final:

//Lineal
#define MK_3_SPEED
#define MK_C_OFFSET_0 3
#define MK_C_OFFSET_1 7
#define MK_C_OFFSET_2 20
#define MK_C_INTERVAL_2 10
#define MK_W_OFFSET_0 1
#define MK_W_INTERVAL_0 100
#define MK_W_OFFSET_1 2
#define MK_W_INTERVAL_1 80
#define MK_W_OFFSET_2 6
#define MK_W_INTERVAL_2 5

//Aceleracion cuadratica
//#define MK_KINETIC_SPEED
//#define MOUSEKEY_DELAY 0
//#define MOUSEKEY_INTERVAL 16
//#define MOUSEKEY_MOVE_DELTA 4
//#define MOUSEKEY_INITIAL_SPEED 100
//#define MOUSEKEY_BASE_SPEED 100
//#define MOUSEKEY_DECELERATED_SPEED 400
//#define MOUSEKEY_ACCELERATED_SPEED 3000
//#define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 32
//#define MOUSEKEY_WHEEL_BASE_MOVEMENTS 42
//#define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48
//#define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
Template

Este archivo debe de estar colocado en: qmk_firmware/keyboards/handwired/dactyl_manuform/5x6/keymaps/Alfa-Omega/keymap.c

#include QMK_KEYBOARD_H

#define _KB 0
#define _NAV 1
#define _MOUSE 2
#define _GAMEMOD 3
#define _NUMBERS 4
#define _SYMBOLS 5
#define _MEDIA 6

#define VAL             140
#define SOFT_RED        0, 255, VAL
#define SOFT_GREEN      85, 255, VAL
#define SOFT_BLUE       170, 255, VAL
#define SOFT_PURPLE     191, 255, VAL
#define SOFT_YELLOW     43, 255, VAL
#define SOFT_ORANGE     21, 255, VAL

enum custom_keycodes {
    MVKBD = SAFE_RANGE,
    MVNAV,
    MVMOUSE,
    NAVBACK,
    NAVFRNT,
    SHDESK,
    ALTWIN,
    DESKGRID,
    ALTTABR,
    ALTTABL,
    CRTTAB,
    RUNTER,
    RUNGB,
    RUNCOM,
    SOKEY,
    SELECT,
    CLIPB,
    COPY,
    PASTE,
    CUTK,
    UNDO,
    DELETE,
    CLOSETAB,
    NEWTAB,
    INCOG,
    ALTF4,
    RTAB,
    APP1,
    APP2,
    APP3,
    APP4,
    APP5,
    APP6,
    APP7,
    APPFOLDER,
    BRWBAR,
    DEV_EXP,
    DEV_SEAR,
    DEV_QUIT,
    DEV_TAB,
    DEV_RUN,
    DEV_DEBUG,
    DEV_STOP,
    DEV_OVER,
    DEV_INTO,
    DEV_OUT,
    DEV_SNPT,
    DEV_FNC,
    S_LANGBRT,
    S_RANGBRT,
    S_LCURLYBRT,
    S_RCURLYBRT,
    S_LSQBRT,
    S_RSQBRT,
    S_LPAREN,
    S_RPAREN,
    S_LQMARK,
    S_RQMARK,
    S_SLSH,
    S_EQL,
    S_QUOT,
    S_AT,
    S_ASTRK,
    S_DOLLAR,
    S_PERC,
    S_HASTG,
    S_ACFL,
    S_AMP,
    S_EXCL,
    S_NFEM,
    S_BSLSH,
    S_VGL,
    S_DIERE,
    S_PIPE,
    MIAU
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
    case MVKBD:
        if (record->event.pressed) {
            // when keycode is pressed
            layer_move(0);
        } else {
            // when keycode is released
        }
        break;

    case MVNAV:
        if (record->event.pressed) {
            layer_move(1);
        } else {
        }
        break;

    case MVMOUSE:
        if (record->event.pressed) {
            layer_move(_MOUSE);
        } else {
        }
        break;

    case NAVBACK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_LEFT));
        } else {
            clear_keyboard();
        }
        break;

    case NAVFRNT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT));
        } else {
            clear_keyboard();
        }
        break;

    case SHDESK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_D));
        } else {
            clear_keyboard();
        }
        break;

    case ALTWIN:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LALT) SS_DELAY(20) SS_TAP(X_TAB));
        } else {
            clear_keyboard();
        }
        break;

    case DESKGRID:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_F8));
        } else {
            clear_keyboard();
        }
        break;

    case ALTTABR:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_TAB));
        } else {
            clear_keyboard();
        }
        break;

    case ALTTABL:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) SS_TAP(X_TAB));
        } else {
            clear_keyboard();
        }
        break;

    case CRTTAB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_T));
        } else {
            clear_keyboard();
        }
        break;

    case RUNTER:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_T));
        } else {
            clear_keyboard();
        }
        break;

    case RUNGB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_B));
        } else {
            clear_keyboard();
        }
        break;

    case RUNCOM:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_F2));
            layer_move(0);
        } else {
            clear_keyboard();
        }
        break;

    case SOKEY:
        if (record->event.pressed) {
            layer_move(0);
            SEND_STRING(SS_DOWN(X_LGUI));
        } else {
            clear_keyboard();
        }
        break;

    case SELECT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT));
        } else {
            clear_keyboard();
        }
        break;

    case CLIPB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_V));
        } else {
            clear_keyboard();
        }
        break;

    case COPY:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_C));
        } else {
            clear_keyboard();
        }
        break;

    case PASTE:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_V));
        } else {
            clear_keyboard();
        }
        break;

    case CUTK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_X));
        } else {
            clear_keyboard();
        }
        break;

    case UNDO:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_Z));
        } else {
            SEND_STRING(SS_UP(X_LCTL) SS_UP(X_Z));
        }
        break;

    case DELETE:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_BSPC));
        } else {
            clear_keyboard();
            layer_move(0);
        }
        break;

    case CLOSETAB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_W));
        } else {
            clear_keyboard();
        }
        break;

    case NEWTAB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_T));
        } else {
            clear_keyboard();
        }
        break;

    case INCOG:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) SS_DOWN(X_N));
        } else {
            clear_keyboard();
        }
        break;

    case ALTF4:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_F4));
        } else {
            clear_keyboard();
        }
        break;

    case RTAB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_TAB));
        } else {
            clear_keyboard();
        }
        break;

    case APP1:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_1));
        } else {
            clear_keyboard();
        }
        break;

    case APP2:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_2));
        } else {
            clear_keyboard();
        }
        break;

    case APP3:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_3));
        } else {
            clear_keyboard();
        }
        break;


    case APP4:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_4));
        } else {
            clear_keyboard();
        }
        break;


    case APP5:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_5));
        } else {
            clear_keyboard();
        }
        break;


    case APP6:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_6));
        } else {
            clear_keyboard();
        }
        break;


    case APP7:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_7));
        } else {
            clear_keyboard();
        }
        break;

    case APPFOLDER:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_E));
        } else {
            clear_keyboard();
        }
        break;

    case BRWBAR:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_K));
        } else {
            clear_keyboard();
            layer_move(0);
        }
        break;

    case DEV_EXP:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_L));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_SEAR:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LBRC));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_QUIT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_F4));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_TAB:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_TAB));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_RUN:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_F5));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_DEBUG:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_F5));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_STOP:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_F5));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_OVER:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_F10));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_INTO:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_F11));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_OUT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_F11));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_SNPT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_K) SS_TAP(X_X));
        } else {
            clear_keyboard();
        }
        break;

    case DEV_FNC:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_F2));
            SEND_STRING(SS_UP(X_LCTL));
            SEND_STRING(SS_TAP(X_TAB) SS_TAP(X_TAB));
        } else {
            clear_keyboard();
        }
        break;


        /*---------------SYMBOLS----------------*/

    case S_RANGBRT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_NUBS));
        } else {
            clear_keyboard();
        }
        break;

    case S_LCURLYBRT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_QUOT));
        } else {
            clear_keyboard();
        }
        break;

    case S_RCURLYBRT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_BSLS));
        } else {
            clear_keyboard();
        }
        break;

    case S_LSQBRT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_LBRC));
        } else {
            clear_keyboard();
        }
        break;

    case S_RSQBRT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_RBRC));
        } else {
            clear_keyboard();
        }
        break;

    case S_LPAREN:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_8));
        } else {
            clear_keyboard();
        }
        break;

    case S_RPAREN:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_9));
        } else {
            clear_keyboard();
        }
        break;

    case S_LQMARK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_EQL));
        } else {
            clear_keyboard();
        }
        break;

    case S_RQMARK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_MINS));
        } else {
            clear_keyboard();
        }
        break;


    case S_SLSH:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_7));
        } else {
            clear_keyboard();
        }
        break;

    case S_EQL:
        if (record->event.pressed) {
            SEND_STRING(SS_UP(X_RALT));
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_0));
        } else {
            clear_keyboard();
        }
        break;

    case S_QUOT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_2));
        } else {
            clear_keyboard();
        }
        break;

    case S_AT:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_2));
        } else {
            clear_keyboard();
        }
        break;

    case S_ASTRK:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_RBRC));
        } else {
            clear_keyboard();
        }
        break;

    case S_DOLLAR:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_4));
        } else {
            clear_keyboard();
        }
        break;

    case S_PERC:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_5));
        } else {
            clear_keyboard();
        }
        break;

    case S_HASTG:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_3));
        } else {
            clear_keyboard();
        }
        break;

    case S_ACFL:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_LBRC));
        } else {
            clear_keyboard();
        }
        break;

    case S_AMP:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_6));
        } else {
            clear_keyboard();
        }
        break;

    case S_EXCL:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_1));
        } else {
            clear_keyboard();
        }
        break;

    case S_NFEM:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_GRV));
        } else {
            clear_keyboard();
        }
        break;

    case S_BSLSH:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_GRV));
        } else {
            clear_keyboard();
        }
        break;

    case S_VGL:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_4));
        } else {
            clear_keyboard();
        }
        break;

    case S_DIERE:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_QUOT));
        } else {
            clear_keyboard();
        }
        break;

    case S_PIPE:
        if (record->event.pressed) {
            SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_1));
        } else {
            clear_keyboard();
        }
        break;

    case MIAU:
        if (record->event.pressed) {
            SEND_STRING("Miau !!!");
        } else {
            clear_keyboard();
        }
        break;

    }
  return true;
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_KB] = LAYOUT_5x6(
        MIAU,    APP4, APPFOLDER,  KC_COMM, KC_ESC,  KC_VOLD,                    KC_VOLU, APP3,   KC_DOT,  KC_DEL, TG(_GAMEMOD), KC_PSCR,
        SHDESK,  KC_Q, KC_W,       KC_E,    KC_R,    KC_T,                       KC_Y,    KC_U,   KC_I,    KC_O,   KC_P,         KC_QUOT,
        KC_TAB,  KC_A, KC_S,       KC_D,    KC_F,    KC_G,                       KC_H,    KC_J,   KC_K,    KC_L,   KC_SLSH,      KC_LCTL,
        KC_LCTL, KC_Z, KC_X,       KC_C,    KC_V,    KC_B,                       KC_N,    KC_M,   S_EQL,   MVNAV,  KC_SCLN,      TG(_MEDIA),
                         KC_APP,  KC_LGUI,                                                      MVMOUSE, KC_EQL,
                                         KC_LSFT,   KC_BSPC,                     KC_SPC,  KC_ENT,
                                         KC_LALT,   KC_TAB,                      MO(_NUMBERS),  MO(_SYMBOLS),
                                         DESKGRID,  RUNCOM,                      MVMOUSE, KC_RALT
    ),

    [_NAV] = LAYOUT_5x6(
        KC_NO,  KC_TRNS,   KC_TRNS,  BRWBAR,  KC_ESC,  KC_TRNS,                   KC_TRNS, KC_TRNS,  KC_NO,    KC_TRNS,   TG(_GAMEMOD), KC_PSCR,
        SHDESK,   ALTF4,   CLOSETAB, ALTTABL, ALTTABR, NEWTAB,                    KC_NO,   KC_NO,    KC_UP,    KC_PGUP,   KC_NO,        KC_NO,
        KC_TRNS,  ALTWIN,  RTAB,     KC_LCTL, KC_LSFT, KC_NO,                     KC_HOME, KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_END,       KC_TRNS,
        KC_TRNS,  UNDO,    CUTK,     COPY,    PASTE,   CLIPB,                     INCOG,   KC_PGDN,  KC_NO,    KC_NO,     KC_NO,        TG(_MEDIA),
                          KC_APP,  KC_LGUI,                                                            MVMOUSE,  KC_NO,
                                            MVKBD,   KC_TRNS,                      KC_TRNS,       KC_TRNS,
                                            KC_TRNS,   KC_TRNS,                    MO(_NUMBERS),  KC_TRNS,
                                            KC_TRNS,   KC_TRNS,                    KC_TRNS,       KC_TRNS

    ),

    [_MOUSE] = LAYOUT_5x6(
          QK_BOOT, KC_TRNS, KC_TRNS,  BRWBAR,  KC_ESC,  KC_TRNS,                  KC_TRNS,   KC_TRNS, KC_NO,   KC_NO,   TG(_GAMEMOD), KC_PSCR,
          SHDESK,  ALTF4,   CLOSETAB, ALTTABL, ALTTABR, NEWTAB,                   KC_BTN2,   KC_BTN1, KC_MS_U, KC_WH_U, KC_WH_R,      KC_NO,
          ALTWIN,  KC_ACL0, KC_ACL1,  KC_ACL2, KC_BTN1, KC_BTN2,                  KC_WBAK,   KC_MS_L, KC_MS_D, KC_MS_R, KC_WFWD,      KC_TRNS,
          KC_NO,   UNDO,    CUTK,     COPY,    PASTE,   CLIPB,                    KC_WH_L,   KC_WH_D, KC_NO,   MVNAV,   KC_NO,        TG(_MEDIA),
                           KC_APP,  KC_LGUI,                                                           KC_NO,   KC_NO,
                                             MVKBD,   KC_TRNS,                    KC_TRNS,   KC_TRNS,
                                             KC_TRNS, KC_TRNS,                    KC_TRNS,   KC_TRNS,
                                             KC_TRNS, KC_TRNS,                    KC_TRNS,   KC_TRNS
    ),

    [_NUMBERS] = LAYOUT_5x6(
        KC_NO,   KC_NO,   KC_NO,   KC_COMM, KC_NO,   KC_NO,                        KC_NO,   KC_NO,   KC_DOT, KC_NO,   KC_NO,   KC_NO,
        KC_NO,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                        KC_NO,   KC_7,    KC_8,    KC_9,   KC_NO,   KC_NO,
        KC_NO,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_NO,                        KC_NO,   KC_4,    KC_5,    KC_6,   KC_NO,   KC_LCTL,
        KC_NO,   KC_F9,  KC_F10,  KC_F11,  KC_F12,   KC_NO,                        KC_0,    KC_1,    KC_2,    KC_3,   KC_NO,   KC_NO,
                          KC_NO,  KC_LGUI,                                                            KC_NO,   KC_NO,
                                           MVKBD,     KC_TRNS,                     KC_TRNS,   KC_TRNS,
                                           KC_TRNS,   KC_TRNS,                     KC_TRNS,   KC_TRNS,
                                           KC_TRNS,   KC_TRNS,                     KC_TRNS,   KC_TRNS
    ),

    [_SYMBOLS] = LAYOUT_5x6(
        KC_NO,   S_NFEM,    KC_GRV,   S_AT,        KC_NO,       KC_NO,             KC_NO,   KC_NO,   KC_NO,    KC_NO,    KC_NO,   KC_NO,
        KC_NO,   S_LQMARK,  S_RQMARK, KC_NUBS,     S_RANGBRT,   S_EQL,             S_DIERE, S_ACFL,  S_LPAREN, S_RPAREN, S_VGL,   KC_NO,
        KC_NO,   KC_RBRC,   S_SLSH,   S_LCURLYBRT, S_RCURLYBRT, S_DOLLAR,          KC_LBRC, S_AMP,   S_QUOT,   KC_MINS,  S_BSLSH, KC_LCTL,
        KC_NO,   KC_LBRC,   S_ASTRK,  S_LSQBRT,    S_RSQBRT,    S_PERC,            KC_BSLS, S_HASTG, S_PIPE,   S_EXCL,   KC_NO,   KC_NO,
                            KC_NO,    KC_LGUI,                                                          KC_NO,   KC_NO,
                                            MVKBD,   KC_TRNS,                      KC_TRNS,   KC_TRNS,
                                            KC_TRNS, KC_TRNS,                      KC_TRNS,   KC_TRNS,
                                            KC_TRNS, KC_TRNS,                      KC_TRNS,   KC_TRNS
    ),

    [_GAMEMOD] = LAYOUT_5x6(
        KC_NO,   KC_ESC,  KC_1,    KC_2,    KC_3,     KC_4,                       KC_5,    KC_6,     KC_7,     KC_8,      KC_TRNS,  KC_PSCR,
        KC_T,    KC_NO,   KC_Q,    KC_W,    KC_E,     KC_R,                       KC_Y,    KC_U,     KC_I,     KC_O,      KC_P,     KC_NO,
        KC_G,    KC_LSFT, KC_A,    KC_S,    KC_D,     KC_F,                       KC_H,    KC_J,     KC_K,     KC_L,      KC_UP,    KC_NO,
        KC_B,    KC_LCTL, KC_Z,    KC_X,    KC_C,     KC_V,                       KC_N,    KC_M,     S_EQL,    KC_SCLN,   KC_DOWN,  KC_RIGHT,
                          KC_NO,   KC_NO,                                                             MVMOUSE, KC_LEFT,
                                            KC_LSFT,   KC_SPC,                    KC_TRNS,       KC_TRNS,
                                            KC_TRNS,   KC_TRNS,                   MO(_NUMBERS),  KC_TRNS,
                                            KC_VOLD,   KC_VOLU,                   KC_TRNS,       KC_TRNS

    ),

    [_MEDIA] = LAYOUT_5x6(
        KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,    KC_VOLD,                    KC_VOLU,   KC_NO,      KC_NO,      KC_NO,    KC_NO,   KC_NO,
        KC_NO,   KC_NO,   KC_NO,   KC_MFFD,  KC_MRWD,  KC_NO,                      KC_NO,   RGB_HUI,    RGB_SAI,    RGB_VAI,  KC_NO,   KC_NO,
        KC_NO,   KC_NO,   KC_MSTP, KC_MPRV,  KC_MNXT,  KC_NO,                      KC_NO,   RGB_HUD,    RGB_SAD,    RGB_VAD,  KC_NO,   KC_NO,
        KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,    KC_NO,                      KC_NO,   RGB_RMOD,   RGB_MOD,    KC_NO,    KC_NO,   KC_TRNS,
                          KC_NO,   KC_NO,                                                              KC_NO,    KC_NO,
                                            MVKBD,     KC_MPLY,                    KC_TRNS,   RGB_TOG,
                                            KC_MSTP,   KC_MUTE,                    KC_TRNS,   KC_TRNS,
                                            KC_TRNS,   KC_TRNS,                    KC_TRNS,   KC_TRNS
    )
};


const rgblight_segment_t PROGMEM nav_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 7, SOFT_BLUE}
);

const rgblight_segment_t PROGMEM mouse_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 7, SOFT_GREEN}
);

const rgblight_segment_t PROGMEM symbols_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 7, SOFT_PURPLE}
);

const rgblight_segment_t PROGMEM numbers_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 7, SOFT_YELLOW}
);

const rgblight_segment_t PROGMEM game_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 2, SOFT_ORANGE},
    { 5, 2, SOFT_ORANGE}
);

const rgblight_segment_t PROGMEM media_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 6, 1, SOFT_RED}
);

const rgblight_segment_t PROGMEM caps_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    { 0, 1, HSV_RED},
    { 1, 1, HSV_GREEN},
    { 2, 1, HSV_BLUE},
    { 3, 1, HSV_GOLD},
    { 4, 1, HSV_PURPLE},
    { 5, 1, HSV_GOLD},
    { 6, 1, HSV_PINK}
);

const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
    nav_layer,
    mouse_layer,
    symbols_layer,
    numbers_layer,
    media_layer,
    game_layer,
    caps_layer
);

void keyboard_post_init_user(void) {
    rgblight_layers = my_rgb_layers;
}

bool led_update_user(led_t led_state) {
    rgblight_set_layer_state(6, led_state.caps_lock);
    return true;
}


layer_state_t default_layer_state_set_kb(layer_state_t state) {
    rgblight_set_layer_state(2, layer_state_cmp(state, _KB));
    return state;
}

layer_state_t layer_state_set_user(layer_state_t state) {
    rgblight_set_layer_state(0, layer_state_cmp(state, _NAV));
    rgblight_set_layer_state(1, layer_state_cmp(state, _MOUSE));
    rgblight_set_layer_state(2, layer_state_cmp(state, _NUMBERS));
    rgblight_set_layer_state(3, layer_state_cmp(state, _SYMBOLS));

    rgblight_set_layer_state(4, layer_state_cmp(state, _MEDIA));
    rgblight_set_layer_state(5, layer_state_cmp(state, _GAMEMOD));
    return state;
}
Tags

QMK | Dactyl Manuform | keymap